"""
设备表更新脚本 - 添加设备状态字段
运行此脚本以更新数据库表结构，支持设备状态数据
"""

import os
import sys
import sqlite3
from datetime import datetime

# 添加项目根目录到搜索路径，以便导入应用模块
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

def update_device_table():
    """更新设备表结构，添加新字段"""
    print("开始更新设备表结构...")
    
    # 连接SQLite数据库
    db_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'app', 'data', 'app.db'))
    if not os.path.exists(db_path):
        print(f"数据库文件不存在: {db_path}")
        return False
    
    try:
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()
        
        # 检查字段是否已存在
        cursor.execute("PRAGMA table_info(devices)")
        columns = [column[1] for column in cursor.fetchall()]
        
        # 添加新字段
        new_columns = {
            'battery_level': 'FLOAT DEFAULT 100.0',
            'work_mode': "VARCHAR(20) DEFAULT '自动'",
            'device_health': 'FLOAT DEFAULT 100.0',
            'last_active': 'TIMESTAMP'
        }
        
        for column, definition in new_columns.items():
            if column not in columns:
                print(f"添加字段: {column}")
                cursor.execute(f"ALTER TABLE devices ADD COLUMN {column} {definition}")
        
        # 提交更改
        conn.commit()
        print("设备表结构更新完成")
        
        # 初始化新字段的值
        cursor.execute("UPDATE devices SET last_active = ? WHERE last_active IS NULL", (datetime.utcnow(),))
        conn.commit()
        print("设备表数据初始化完成")
        
        return True
    except Exception as e:
        print(f"更新设备表结构失败: {str(e)}")
        return False
    finally:
        if conn:
            conn.close()

def main():
    """主函数"""
    success = update_device_table()
    if success:
        print("设备表更新成功，后端现在支持设备状态数据")
    else:
        print("设备表更新失败")

if __name__ == "__main__":
    main()
